<?php
class Delivery_Model_ItemPromocion 
	extends Delivery_Model_Abstract
{
	
	public $idItem;
	public $idPromocion;
	public $cantidad;
	public $idCategoria;
	public $idProducto;
	public $idsProducto;
	
	protected $_categoryProducts; 
	protected $_producto; 
	protected $_productos; 
	protected $_categoria; 
	
	public function getId()
	{
		return $this->idItem;	
	}
	
	public function getPrecio( $idNegocio )
	{
		$precio = 0;
		
		if ( $this->isProducto() ){
			$precio = $this->getProducto()->precio;
		}
		
		if ( $this->isCategoria() ){
			
			$idCategoria = $this->idCategoria;
			
			/**
			 * Traigo el precio maximo de la categoria, aunque si deberia ser el mismo precio 
			 * para poder crear una promocion de este tipo
			 */
			$mapper = Delivery_Model_Factory::mapper('Productos');
			$precio = $mapper->getPriceByCategory($idCategoria, $idNegocio);
			
		}
		
		if ( $this->isProductos() ){
			/**
			 * Busco el producto con el precio maximo, aunque seria
			 * logico que estos productos tengan los mismos precios
			 */
			
			foreach($this->getProductos() as $producto){
				
				if ( $precio < $producto->precio){
					$precio = $producto->precio;
				}
			}
		}
		
		return $precio * $this->cantidad;
		
	}
	
	
	public function getProducto()
	{
		return $this->_producto;
	}
	
	public function setProducto( $producto )
	{
		$this->_producto = $producto;
		return $this;
	}
	
	public function getProductos()
	{
		return $this->_productos;
	}
	
	public function setProductos( $productos )
	{
		$this->_productos = $productos;
		return $this;
	}
	
	public function getCategoria()
	{
		return $this->_categoria;
	}
	
	public function setCategoria( $categoria )
	{
		$this->_categoria = $categoria;
		return $this;
	}
	
//	public function getProducto()
//	{
//		if ( ! $this->isProducto() ){
//			return null;
//		}
//		
//		Delivery_Model_DbTable_Productos::onlyActive( false );
//		
//		$producto = Delivery_Model_Producto::getById( $this->idProducto );
//		
//		Delivery_Model_DbTable_Productos::onlyActive( true );
//		
//		return $producto;
//	}
	
//	public function getCategoria()
//	{
//		if ( ! $this->isCategoria() ){
//			return null;
//		}
//		
//		return Delivery_Model_Categoria::getById( $this->idCategoria );
//	}
	
//	public function getProductos()
//	{
//		if ( $this->isProductos() ){
//			
//			Delivery_Model_DbTable_Productos::onlyActive( false );
//		
//			$productos = Delivery_Model_Producto::getByIds( $this->productos );
//			
//			Delivery_Model_DbTable_Productos::onlyActive( true );
//			
//			return $productos;
//		} 
//				
//		return null;
//	}
	
	public function getCategoryProductos()
	{
		return $this->_categoryProducts;
	}
	
	public function setCategoryProductos( $categoryProducts )
	{
		$this->_categoryProducts = $categoryProducts;
		return $this;
	}
	
//	public function getCategoryProductos( $idNegocio )
//	{
//		$mapper = Delivery_Model_Factory::get();
//		$productos = Delivery_Model_Producto::getByNegocio( $idNegocio );
//		
//		foreach ($productos as $k=>$producto){
//		
//			if ( $producto->idCategoria != $this->idCategoria ){
//				unset($productos[$k]);
//			}
//		}
//			
//		return $productos;
//	}
	
	
	
	public function isCategoria()
	{
		return ! is_null( $this->idCategoria );
	}
	
	public function isProducto()
	{
		return ! is_null( $this->idProducto );
	}
	
	public function isProductos()
	{
		return ! is_null( $this->idsProducto );
	}
	
	
	
	public function hasProduct( $product )
	{
		if ( $this->isProducto() && $product->idProducto == $this->idProducto){
			return true;
		}
		
		if ( $this->isCategoria() && $product->getCategoria()->idCategoria == $this->idCategoria){
			return true;
		}
		
		if ( $this->isProductos() ){
			
			$ids = explode(",", $this->idsProducto);
			return in_array($product->idProducto, $ids);
		}
		
		return false;
	}
	
}